﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;

namespace Ocean.His.MedicalInsurance
{
    /// <summary>
    /// 检查记录
    /// </summary>
    [DataContract]
    public class SI4501ExamInfo
    {

        /// <summary>
        /// 就医流水号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 院内唯一号
        /// </summary>
        [DataMember(Name = "mdtrt_sn")]
        public string MdtrtSn { get; set; }

        /// <summary>
        /// 就诊ID
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 医保病人必填
        /// </summary>
        [DataMember(Name = "mdtrt_id")]
        public string MdtrtId { get; set; }

        /// <summary>
        /// 人员编号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 医保病人必填
        /// </summary>
        [DataMember(Name = "psn_no")]
        public string PsnNo { get; set; }

        /// <summary>
        /// 申请单号
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "appy_no")]
        public string AppyNo { get; set; }

        /// <summary>
        /// 申请单据名称
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "appy_doc_name")]
        public string AppyDocName { get; set; }

        /// <summary>
        /// 报告单号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rpotc_no")]
        public string RpotcNo { get; set; }

        /// <summary>
        /// 报告单类别代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：Y
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rpotc_type_code")]
        public string RpotcTypeCode { get; set; }

        /// <summary>
        /// 检查报告单名称
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exam_rpotc_name")]
        public string ExamRpotcName { get; set; }

        /// <summary>
        /// 检查日期
        /// 参数类型：日期型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exam_date")]
        public string ExamDate { get; set; }

        /// <summary>
        /// 报告日期
        /// 参数类型：日期型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rpt_date")]
        public string RptDate { get; set; }

        /// <summary>
        /// 送检日期
        /// 参数类型：日期型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "cma_date")]
        public string CmaDate { get; set; }

        /// <summary>
        /// 采样日期
        /// 参数类型：日期型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "sapl_date")]
        public string SaplDate { get; set; }

        /// <summary>
        /// 标本号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "spcm_no")]
        public string SpcmNo { get; set; }

        /// <summary>
        /// 标本名称
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "spcm_name")]
        public string SpcmName { get; set; }

        /// <summary>
        /// 检查类别代码
        /// 参数类型：字符型
        /// 参数长度：10
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exam_type_code")]
        public string ExamTypeCode { get; set; }

        /// <summary>
        /// 检查-项目代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exam_item_code")]
        public string ExamItemCode { get; set; }

        /// <summary>
        /// 检查-类别名称
        /// 参数类型：字符型
        /// 参数长度：100
        /// 代码标识：
        /// 是否必填：
        /// 参照
        /// </summary>
        [DataMember(Name = "exam_type_name")]
        public string ExamTypeName { get; set; }

        /// <summary>
        /// 检查-项目名称
        /// 参数类型：字符型
        /// 参数长度：300
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exam_item_name")]
        public string ExamItemName { get; set; }

        /// <summary>
        /// 院内检查-项目代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "inhosp_exam_item_code")]
        public string InhospExamItemCode { get; set; }

        /// <summary>
        /// 院内检查-项目名称
        /// 参数类型：字符型
        /// 参数长度：300
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "inhosp_exam_item_name")]
        public string InhospExamItemName { get; set; }

        /// <summary>
        /// 检查部位
        /// 参数类型：字符型
        /// 参数长度：500
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exam_part")]
        public string ExamPart { get; set; }

        /// <summary>
        /// 检查结果阳性标志
        /// 参数类型：字符型
        /// 参数长度：2
        /// 代码标识：Y
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exam_rslt_poit_flag")]
        public string ExamRsltPoitFlag { get; set; }

        /// <summary>
        /// 检查
        /// 参数类型：/
        /// 参数长度：检验结果异常标志
        /// 代码标识：字符型
        /// 是否必填：10
        /// Y
        /// </summary>
        [DataMember(Name = "exam_rslt_abn")]
        public string ExamRsltAbn { get; set; }

        /// <summary>
        /// 检查结论
        /// 参数类型：字符型
        /// 参数长度：1000
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exam_ccls")]
        public string ExamCcls { get; set; }

        /// <summary>
        /// 申请机构名称
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "appy_org_name")]
        public string AppyOrgName { get; set; }

        /// <summary>
        /// 申请科室代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 参照科室代码（dept）
        /// </summary>
        [DataMember(Name = "appy_dept_code")]
        public string AppyDeptCode { get; set; }

        /// <summary>
        /// 检查科室代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 参照科室代码（dept）
        /// </summary>
        [DataMember(Name = "exam_dept_code")]
        public string ExamDeptCode { get; set; }

        /// <summary>
        /// 住院科室代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 参照科室代码（dept）
        /// </summary>
        [DataMember(Name = "ipt_dept_code")]
        public string IptDeptCode { get; set; }

        /// <summary>
        /// 住院科室名称
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "ipt_dept_name")]
        public string IptDeptName { get; set; }

        /// <summary>
        /// 开单医生代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "bilg_dr_codg")]
        public string BilgDrCodg { get; set; }

        /// <summary>
        /// 开单医生姓名
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "bilg_dr_name")]
        public string BilgDrName { get; set; }

        /// <summary>
        /// 执行机构名称
        /// 参数类型：字符型
        /// 参数长度：200
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exe_org_name")]
        public string ExeOrgName { get; set; }

        /// <summary>
        /// 有效标志
        /// 参数类型：字符型
        /// 参数长度：3
        /// 代码标识：Y
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "vali_flag")]
        public string ValiFlag { get; set; }

    }

    /// <summary>
    /// 检查项目信息
    /// </summary>
    [DataContract]
    public class SI4501ItemInfo
    {

        /// <summary>
        /// 申请单号
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "appy_no")]
        public string AppyNo { get; set; }

        /// <summary>
        /// 报告单号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rpotc_no")]
        public string RpotcNo { get; set; }

        /// <summary>
        /// 检查-项目代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exam_item_code")]
        public string ExamItemCode { get; set; }

        /// <summary>
        /// 检查-项目名称
        /// 参数类型：字符型
        /// 参数长度：300
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exam_item_name")]
        public string ExamItemName { get; set; }

        /// <summary>
        /// 院内检查-项目代码
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "inhosp_exam_item_code")]
        public string InhospExamItemCode { get; set; }

        /// <summary>
        /// 院内检查-项目名称
        /// 参数类型：字符型
        /// 参数长度：300
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "inhosp_exam_item_name")]
        public string InhospExamItemName { get; set; }

        /// <summary>
        /// 检查费用
        /// 参数类型：数值型
        /// 参数长度：16,2
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "exam_charge")]
        public decimal ExamCharge { get; set; }

    }

    /// <summary>
    /// 检查标本信息
    /// </summary>
    [DataContract]
    public class SI4501SampleInfo
    {

        /// <summary>
        /// 报告单号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "rpotc_no")]
        public string RpotcNo { get; set; }

        /// <summary>
        /// 申请单号
        /// 参数类型：字符型
        /// 参数长度：50
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "appy_no")]
        public string AppyNo { get; set; }

        /// <summary>
        /// 采样日期
        /// 参数类型：日期型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：是
        /// 
        /// </summary>
        [DataMember(Name = "sapl_date")]
        public string SaplDate { get; set; }

        /// <summary>
        /// 标本号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "spcm_no")]
        public string SpcmNo { get; set; }

        /// <summary>
        /// 标本名称
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "spcm_name")]
        public string SpcmName { get; set; }

    }

    /// <summary>
    /// 检查影像信息
    /// </summary>
    [DataContract]
    public class SI4501ImageInfo
    {

        /// <summary>
        /// 报告单号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：Y
        /// 
        /// </summary>
        [DataMember(Name = "rpotc_no")]
        public string RpotcNo { get; set; }

        /// <summary>
        /// 全局唯一号
        /// 参数类型：字符型
        /// 参数长度：200
        /// 代码标识：
        /// 是否必填：Y
        /// 图像中的study_uid
        /// </summary>
        [DataMember(Name = "study_uid")]
        public string StudyUid { get; set; }

        /// <summary>
        /// 检查号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "patient_id")]
        public string PatientId { get; set; }

        /// <summary>
        /// 患者姓名
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 图像中的患者姓名
        /// </summary>
        [DataMember(Name = "patient_name")]
        public string PatientName { get; set; }

        /// <summary>
        /// 图像流水号
        /// 参数类型：字符型
        /// 参数长度：30
        /// 代码标识：
        /// 是否必填：
        /// 图像中的AccessionNumber
        /// </summary>
        [DataMember(Name = "acession_no")]
        public string AcessionNo { get; set; }

        /// <summary>
        /// 检查时间
        /// 参数类型：日期型
        /// 参数长度：
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "study_time")]
        public string StudyTime { get; set; }

        /// <summary>
        /// 检查类型
        /// 参数类型：字符型
        /// 参数长度：20
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "modality")]
        public string Modality { get; set; }

        /// <summary>
        /// 存储路径
        /// 参数类型：字符型
        /// 参数长度：300
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "store_path")]
        public string StorePath { get; set; }

        /// <summary>
        /// 序列数量
        /// 参数类型：数值型
        /// 参数长度：8,0
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "series_count")]
        public decimal SeriesCount { get; set; }

        /// <summary>
        /// 图像数量
        /// 参数类型：数值型
        /// 参数长度：8,0
        /// 代码标识：
        /// 是否必填：
        /// 
        /// </summary>
        [DataMember(Name = "image_count")]
        public decimal ImageCount { get; set; }

    }


    /// <summary>
    /// 
    /// </summary>
    [DataContract]
    public class SI4501InputModel
    {
        [DataMember(Name = "examinfo")]
        public SI4501ExamInfo si4501ExamInfo { get; set; }

        [DataMember(Name = "iteminfo")]
        public SI4501ItemInfo si4501ItemInfo { get; set; }

        [DataMember(Name = "sampleinfo")]
        public SI4501SampleInfo si4501SampleInfo { get; set; }

        [DataMember(Name = "imageinfo")]
        public SI4501ImageInfo si4501ImageInfo { get; set; }
    }



    /// <summary>
    /// 4501
    /// 急诊留观手术及抢救信息
    /// </summary>
    [DataContract]
    public class SI4501RequestModel : SIBaseRequestModel
    {
        /// <summary>
        /// 交易输入
        /// </summary>
        [DataMember(Name = "input")]
        public SI4501InputModel Input { get; set; }

        public SI4501RequestModel(MedicalInsuranceOption config) : base(config)
        {
            Infno = "4501";
        }
    }
}
